import axios from 'axios'
import qs from 'qs'

// 实现外部链接请求 ，即存在http或者是https 就是请求外部接口

const http = axios.create({
  baseURL: '/',
  timeout: 5000,
  //  设置cross跨域
  crossDomain: true,
  // 设置cross跨域 并设置访问权限 允许跨域携带cookie信息
  withCredentials: true,
  // `xsrfCookieName`是要用作 xsrf 令牌的值的cookie的名称
  //xsrfCookieName: 'XSRF-TOKEN',
  // `xsrfHeaderName`是携带xsrf令牌值的http头的名称
  //xsrfHeaderName: 'X-XSRF-TOKEN', // default
  headers: {}
});

//请求拦截器
http.interceptors.request.use((config) => {
  //可以实现token加入
  //const token = '';
  //token && (config.headers.Authorization = token);
  //可以实现遮罩层防止重复点击
  return config
}, (error) => {
  return Promise.reject(error);
});
//响应拦截器
http.interceptors.response.use((response) => {
  // 如果返回的状态码为200，说明接口请求成功，可以正常拿到数据
  // 否则的话抛出错误
  alert(12);
  console.log(response);
  if (response.status === 200) {
    return Promise.resolve(response);
  } else {
    return Promise.reject(response);
  }
}, (error) => {
  alert(1);
   console.log(error);
  if (error.response) {
    switch (error.response.status) {
      case 400:
        // 错误的请求
        break;
      case 401:
      alert(401);
        // 未授权 — 未授权客户机访问数据, 理解客户未登录
        break;
      case 403:
        // 禁止访问
        break;
      case 404:
        // 页面不存在
        break;
      case 500:
        //  服务器内部错误
        break;
      case 502:
        //  响应超时，请检查网络
        break;
      default:
        // 其他错误
    }
  }
  return Promise.reject(error);
});

//get请求，数据获取
http.get = (url, params) => {
  return new Promise((resolve, reject) => {
    axios.get(url, {
      params: params
    }).then(res => {
      resolve(res)
    }).catch(err => {
      reject(err)
    })
  })
}
//post请求，新建数据
http.post = (url, params) => {
  return new Promise((resolve, reject) => {
    axios.post(url, qs.stringify(params))
      .then(res => {
        resolve(res);
      })
      .catch(err => {
        reject(err)
      })
  });
}
//delete请求， 数据删除
http.delete = (url, params) => {
  return new Promise((resolve, reject) => {
    axios.delete(url, qs.stringify(params))
      .then(res => {
        resolve(res);
      })
      .catch(err => {
        reject(err)
      })
  });
}
//put请求，修改请求
http.put = (url, params) => {
  return new Promise((resolve, reject) => {
    axios.put(url, qs.stringify(params))
      .then(res => {
        resolve(res);
      })
      .catch(err => {
        reject(err)
      })
  });
}

//处理并发请求的助手函数
http.all = axios.all;
http.spread = axios.spread;

export default http
